%include "boot.inc"

SECTION loader vstart=LOADER_BASE_ADDR ;定义loader的起始内存地址
loader_entry:
	jmp loader_start

;*****************data section*******************



; GDT
GDT_BASE:
	dd 0x00000000
	dd 0x00000000

CODE_DESC:                 ;内核代码段
	dd DESC_CODE_LOW_32		; (0 << 16) + 0xFFFF
	dd DESC_CODE_HIGH_32	;

DATA_DESC:					;内核数据段
	dd DESC_DATA_LOW_32
	dd DESC_DATA_HIGH_32	;(0<<16) + 0xFFFF

VIDEO_DESC:
  dd DESC_VIDEO_LOW_32
  dd DESC_VIDEO_HIGH_32


loader_start:
	call clear_screen
	call setup_protection_mode

; enable A20
in al, 0x92
or al, 0000_0010b
out 0x92, al

;load GDT
lgdt [gdt_ptr]

;open protection mode -set cr0 bit 0
move eax, cr0
or eax, 0x00000001
move cr0, eax;

; refresh pipeline
jmp dword SELECTOR_CODE:protection_mode_entry
